package models;

import models.cms.PageDto;
import models.cms.TemplateDto;
import models.cms.ZoneDto;
import models.core.catalog.CategorizationDto;
import models.core.catalog.ColorDto;
import models.core.catalog.ContentDto;
import models.core.catalog.CountryDto;
import models.core.catalog.DesignationDto;
import models.core.catalog.DomainDto;
import models.core.catalog.FormatDto;
import models.core.catalog.GrapeDto;
import models.core.catalog.MediaDto;
import models.core.catalog.MediaTypeDto;
import models.core.catalog.ProductCommentDto;
import models.core.catalog.ProductDto;
import models.core.catalog.ProductRatingDto;
import models.core.catalog.RegionDto;
import models.core.catalog.TagDto;
import models.core.catalog.VarietyDto;
import models.core.catalog.VigneronDto;
import models.core.catalog.VinDto;
import models.core.search.SearchFacetResultDto;
import models.core.search.SearchResultDto;
import models.core.user.CommunityDto;
import models.core.user.ContactDto;
import models.core.user.CredentialDto;
import models.core.user.FavoriteDto;
import models.core.user.RoleDto;
import models.core.user.UserCommentDto;
import models.core.user.UserCommunityDto;
import models.core.user.UserContactDto;
import models.core.user.UserDto;
import models.core.user.UserLogActionDto;
import models.core.user.UserLogDto;
import models.core.user.UserRatingDto;

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonSubTypes;
import org.codehaus.jackson.annotate.JsonSubTypes.Type;
import org.codehaus.jackson.annotate.JsonTypeInfo;

@JsonIgnoreProperties(ignoreUnknown=true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property="dtoName")
@JsonSubTypes({ @Type(value = CategorizationDto.class, name = "CategorizationDto"),
				@Type(value = ColorDto.class, name = "ColorDto"),
				@Type(value = ContentDto.class, name = "ContentDto"),
				@Type(value = CountryDto.class, name = "CountryDto"),
				@Type(value = DesignationDto.class, name = "DesignationDto"),
				@Type(value = DomainDto.class, name = "DomainDto"),
				@Type(value = FormatDto.class, name = "FormatDto"),
				@Type(value = GrapeDto.class, name = "GrapeDto"),
				@Type(value = ProductCommentDto.class, name = "ProductCommentDto"),
				@Type(value = ProductDto.class, name = "ProductDto"),
				@Type(value = VinDto.class, name = "VinDto"),
				@Type(value = ProductRatingDto.class, name = "ProductRatingDto"),
				@Type(value = RegionDto.class, name = "RegionDto"),
				@Type(value = TagDto.class, name = "TagDto"),
				@Type(value = VarietyDto.class, name = "VarietyDto"),
				@Type(value = VigneronDto.class, name = "VigneronDto"),
				@Type(value = SearchResultDto.class, name = "SearchResultDto"),
				@Type(value = SearchFacetResultDto.class, name = "SearchFacetResultDto"),
				@Type(value = PageDto.class, name = "PageDto"),
				@Type(value = TemplateDto.class, name = "TemplateDto"),
				@Type(value = ZoneDto.class, name = "ZoneDto"),
				@Type(value = MediaDto.class, name = "MediaDto"),
				@Type(value = MediaTypeDto.class, name = "MediaTypeDto"),
				@Type(value = CommunityDto.class, name = "CommunityDto"),
				@Type(value = ContactDto.class, name = "CommunityDto"),
				@Type(value = CredentialDto.class, name = "CredentialDto"),
				@Type(value = FavoriteDto.class, name = "FavoriteDto"),
				@Type(value = RoleDto.class, name = "RoleDto"),
				@Type(value = UserCommentDto.class, name = "UserCommentDto"),
				@Type(value = UserCommunityDto.class, name = "UserCommunityDto"),
				@Type(value = UserContactDto.class, name = "UserContactDto"),
				@Type(value = UserDto.class, name = "UserDtoDto"),
				@Type(value = UserLogActionDto.class, name = "UserLogActionDto"),
				@Type(value = UserLogDto.class, name = "UserLogDto"),
				@Type(value = UserRatingDto.class, name = "UserRatingDto")

			})
public interface BeanDto extends BeanDtoInfo, Comparable<BeanDto>{

}
